#include  "work_mod_sw.h"


#if defined(USE_MANUAL_IDLE_FUNC)
#define MAX_FUNC_LIST 		IDLE+1
#else
#define MAX_FUNC_LIST 		IDLE
#endif

 _xdata unsigned int  Sys_Func_List=0;
void Add_Func_To_List(DEV_ON_LIST Dev)
{
	Sys_Func_List |=BIT(Dev);
	//printf(" --->Add_Func_To_List %x \r\n",(u16)Sys_Func_List);

}
void Remov_Func_From_List(DEV_ON_LIST Dev)
{
	Sys_Func_List &=~(BIT(Dev));
	//printf(" --->Remov_Func_From_List %x \r\n",(u16)Sys_Func_List);
	
}
void Set_Curr_Func(SYS_WORK_MODE curr_mod)
{
	work_mode = curr_mod;	
	Sys_Func_List =((curr_mod<<8)|(Sys_Func_List&0x00FF));	
#ifdef SWITCH_MODE_DISPLAY_STATUS

Disp_Con(DISP_MODE);
#endif

	//printf(" --->Set_Curr_Func %x \r\n",(u16)Sys_Func_List);
	
}

SYS_WORK_MODE Next_Func(void)
{
	unsigned char i;
	
//	printf(" -111-->Sys_Func_List %x \r\n",(u16)Sys_Func_List);
//	printf(" -222-->CURR FUNC %x \r\n",(u16)((Sys_Func_List&0xFF00)));

	if((get_device_online_status()&0x01))
		{
			Add_Func_To_List(SD_DEV);
		}
	else
		{
	             Remov_Func_From_List(SD_DEV);
		}
		if((get_device_online_status()&0x02))
		{
			Add_Func_To_List(USB_DEV);
		}
	     else
	     	{
             		Remov_Func_From_List(USB_DEV);	
	     	}
	
#ifdef USE_MANUAL_IDLE_FUNC
#ifndef  USE_ADD_IDE
if((Sys_Func_List&BIT(USB_DEV))||(Sys_Func_List&BIT(SD_DEV)))
	   Remov_Func_From_List(IDLE);	
else
#endif
	Add_Func_To_List(IDLE);
#endif

#ifdef CA_6
	Add_Func_To_List(IDLE);
#endif
		 
	if((Sys_Func_List&0x0FF)>0)
	{
		for(i=(((Sys_Func_List&0xFF00)>>8)+1);i<MAX_FUNC_LIST;i++){
			printf(" --%x->Next_Func --->BIT  %x \r\n",(u16)i,(u16)(BIT(i)));
			if((Sys_Func_List&(BIT(i)))>0){
				return i;
			}
		}				
		for(i=0;i<=((Sys_Func_List&0xFF0)>>8);i++)
			if((Sys_Func_List&(BIT(i)))>0){
				return i;
		}
	}
	
	return SYS_IDLE;
}